Abstract

Based on survey responses from mothers who gave birth in the state of California in 2016, we analyzed the use of synthetic oxytocin (Pitocin) during birth and the ways in which Pitocin usage might change with differences in mothers’ income, education, choice of care provider, and feelings on care providers after birth.

Hypothesis: Among those who had a midwife or would have preferred to have a midwife the drug Pitocin is administered less.

Results: We did not find a significant relationship between the birth providers, the preference of birth providers, and the use of Pitocin. The analysis does indicate a statistically significant relationship between education level and Pitocin use as well as education level and midwife preference.

Introduction

The Childbirth Connection Programs at the National Partnership for Women & Families developed the Listening to Mothers 2016 survey and collected responses used in this project, (available here https://www.chcf.org/collection/listening-to-mothers-in-california/). This sample was collected because of 1 out of every 8 infants born in America is born in the state of California (Survey Factsheet 2018). The data set thus enables researchers to draw larger conclusions about pregnancy, maternal care, and birth interventions in other areas across the country. The dependent variable Pitocin was selected to represent modern birth, the drug is present in birth settings which normally involve hospitals because it is delivered intravenously. This modern touch stone is compared to the role of other “nontraditional” birth choices and preferences within California– the independent variable. Additional independent variables included are type of care provider, birth interventions, income, and education. Mothers who responded gave birth in 2016, lived in California, and spoke either English or Spanish. The role of certain demographic data on birth choices is analyzed to acknowledge the choices of a mother in any birth setting being affected by socioeconomic and cultural factors.

We hypothesize that mothers with midwives or who wished they had a midwife as a provider had less medicalized intervention, specifically Pitocin, during their birth. # History The difference in child delivery practices between obstetrics practitioners and midwives varies greatly. “Whilst it is difficult to categorise maternity models of care exclusively due to the influence of generic policies and guidelines, it is assumed that the underpinning philosophy of a midwife‐led model of care is normality and the natural ability of women to experience birth without routine intervention,” (Sandall 2016). The interventions assessed here are modern birth interventions. As such, we focus on a highly medicalized practice: the use of Pitocin as a method of birth augmentation. Pitocin is an intravenously administered synthetic oxytocin which is meant to mimic the natural oxytocin produced by mothers during labor (Mansy 2017). This type of intervention impacts the experience of mothers in a well-documented manner thanks largely to surveys like Listening to Mothers 2016.

To illustrate, first we have Caroline, a mother whose anecdote was chosen for this paper due to their similar shared experience with many other mothers. Caroline felt pressured into induction on her due date, and was told she would be fine. Caroline said in an interview:

“So she decided to induce me on my due date, and I really was opposed to that, just because like I told you I didn’t want any medications and she insisted that it would be fine, no problem, this happens all the time, it’s no big deal, and I just felt like from a health standpoint, once you have one intervention, it kind of snowballs into needing a bunch of other interventions and I didn’t want that. And I really didn’t want a C-section and then I didn’t want an epidural, that kind of thing. And then from an honesty standpoint, I was worried about what she was telling my insurance company.” (Freund 2008)

Comparatively, first time mother Jessica felt more comfortable with her doula who made sure to inform her about each step in the process being presented to her. She said in an interview:

“My doctor really didn’t go into it so much with me about the lack of pain blocking hormones [when labor is induced], but my doula; she explained to me that it would be very difficult.” (Freund 2008).

Research shows the “use of oxytocin in labor augmentation increases the volume of blood loss,” (Mansy 2017). Use of synthetic oxytocin as a labor intervention practice was present in 27% of responses in our sample. These responses represent a key comparison point between our variables—still, experts insist “in low risk women, induction of labor, regardless of the method used, is associated with a higher risk of PPH [postpartum hemorrhage] than spontaneous labor” (Mansy 2017).

Why may providers use Pitocin in the first place? Pitocin is developed perfectly mimic the naturally occurring oxytocin that is produced by activating the parasympathetic nervous system. Both the natural oxytocin and the synthetic Pitocin induce contractions necessary for labor. The parasympathetic system response is also responsible for the hormonal and chemical balance of the person giving birth. This is the fundamental difference: while the naturally occurring oxytocin comes from the pituitary gland it reduces anxiety, stress, and pain, the synthetic version of oxytocin does not cross the blood brain barrier and does not release the same stress and pain relieving hormones as naturally-occurring oxytocin. (Dekker 2020). Pitocin, therefore, serves a highly physiological function in its ability to instigate uterine contractions but provides none of the psychological benefits. Administration of Pitocin can also be used to control a number of postpartum issues including inducing the delivery of the placenta and hemorrhaging.

Data

The key variables selected and analyzed from the survey data are shown here:

df
VariableExplanation
Q805Which type of maternity care provider most often provided your care during pregnancy? [Answer: 4 - A midwife (could be called CNM)]
Q815Which type of provider do you wish you had? [Answer: 3 - (Midwife (CNM))]
Q1111cHow did your maternity care provider try to start your labor? Please select all that apply. [Answer: 3 - Gave the medicine Pitocin (“pit” or oxytocin) through an IV drip before the start of labor contractions)
Q1830bThinking of your recent pregnancy and birth, what are the total costs you have been asked to pay yourself for any of your maternity care providers and hospital bills for you and your baby? Please include bills already paid and bills owed. Please do not include the cost of buying your health insurance. If you are not sure, give your best guess.
Q1860What is the highest level of education you have completed or the highest degree you have received?
Q1865Which of the following income categories best describes your total 2016 household income before taxes? If you do not know, please give your best guess.
had_midHad a midwife during childbirth
wish_midWanted a midwife during childbirth
pre_pitAdministered Pitocin before childbirth
mid_pitAdministered Pitocin during childbirth

Results

Descriptive Statistics

Figure 1

Survey responses were analyzed descriptively, focusing on percentages of mothers who responded to questions in certain ways. In response to Q705, which asked respondents if they had a choice in their maternity care provider, about 20% of mothers stated they did not have a choice because their provider was assigned to them. Figure 1 shows that the majority of mothers who took this survey most often received care from an OB-GYN. This is consistent with findings from existing research, which point to the overall trend of medicalized birth settings. However, the second largest category of care providers reported in this survey was midwives. This also follows greater population trends.

slices <- c(1976, 52, 97, 221, 145, 27)
lbls <- c("OB-GYN", "Family Doctor","Midwife", "Nurse Practicioner", "Physicians Assistant", "Other")
pct <- round(slices/sum(slices)*100)
lbls <- paste(lbls, pct)
lbls <- paste(lbls, "%", sep="")
pie(slices, init.angle = 100,labels = lbls, main = "Q805: What type of maternity care provider did you have?")

Figure 2

slices <- c(92, 27, 142, 8, 2, 30)
lbls <- c("OB-GYN", "Family Doctor","Midwife", "Nurse Practicioner", "Physicians Assistant", "Other")
pct <- round(slices/sum(slices)*100)
lbls <- paste(lbls, pct)
lbls <- paste(lbls, "%", sep="")
pie(slices, init.angle = 25,labels = lbls, main = "Q815: Which type of provider do you wish you had?", sub= "Respondents answered 1 (Yes) to Q811, Did you wish you had a different provider?")

### Figure 3 Overall, 12% of survey respondents wished they had a different type of maternity care provider than the one they had. From Figure 2, it is shown that almost half of respondents who did want a different care provider wished they had a midwife. A followup question was asked (Q816) to evaluate possible reasons why mothers did not have a midwife if they preferred one. Figure 3 suggests that the most popular reason was that respondents did not think that their health insurance plan would cover the services of a midwife. Other highly cited reasons included: “Another type of maternity care provider was assigned to me” and “I needed a doctor because of my health problems”. ### Figure 3

H <- c(77, 20, 15, 21, 39, 29, 30, 33)
N <- c("a", "b", "c", "d", "e", "f", "g", "h")
lbls816 <- 
  
barplot(H,names.arg=N,xlab="Response", ylab="Number of respondents", col="grey", main="Q816: Why didn't you have a midwife as your maternity care provider?", sub= "Respondents that answered 3 (Midwife) for Q815, Which type of provider did you wish you had?", border="black")

Key

a- I didn’t think my health insurance plan paid for services of a midwife

b- I didn’t think that a midwife could practice in a hospital

c- I didn’t think that I could have an epidural with a midwife

d- I didn’t know what would happen if I needed a doctor (for example, for a c-section)

e- Another type of maternity care provider was assigned to me

f- A midwife was not available

g- I needed a doctor because of my health problems

h- Other reason

Figure 4

Finally, descriptive statistics provided a visualization of birth interventions. Of survey respondents, 39% reported their maternity care provider attempted to induce labor in some way. Figure 4 represents the breakdown of labor starting methods employed by the birth provider present. 27% (n=673) of people who said that their labor was induced by their provider indicated that Pitocin was used. Comparatively, 34% (n=869) of mothers reported Pitocin use to hurry their birth in the later stages of labor.

L <- c(394, 253, 673, 188, 51)
M <- c("a", "b", "c", "d", "e")
barplot(L,names.arg=M,xlab="Response", ylab="Number of respondents", col="grey", main="Q1111: How did your maternity care provider try to start your labor?", sub = "Respondents answered 1 (Yes) to Q1110, Did your maternity care provider try to induce your labor in any way?", border="black")

Key

a- Inserted a finger in to the opening to my womb (cervix) to “sweep” or “strip” the membranes loose

b- Broke and released my water before the start of labor contractions

c- Gave the medicine Pitocin through an IV drip before the start of labor contractions

d- Tried to start my labor some other way

e- Not sure how

Regression Analysis

Relationship(s) were calculated over the most important variables including income, Pitocin usage, wanting a midwife, having a midwife, and education levels. These were analyzed and regressed in order to determine any sort of models and statistically significant factors.

model1 <- lm(mid_pit ~ had_mid + wish_mid + Q1860 + Q1865, data = listening_data)
huxreg(model1, statistics = c(N = "nobs", R2 = "r.squared"))
(1)
(Intercept)0.207 * 
(0.093)  
had_mid0.052   
(0.124)  
wish_mid-0.120   
(0.074)  
Q18600.080 **
(0.026)  
Q1865-0.005   
(0.008)  
N213       
R20.066   
*** p < 0.001; ** p < 0.01; * p < 0.05.

Figure 5: The relationship between Pitocin-hurried birth and having a midwife.

fig_5
## `geom_smooth()` using formula = 'y ~ x'

Upon looking at the graph and the data, it strongly indicates that the relationship between Pitocin-hurried births and the presence of having a midwife during birth was statistically insignificant. This is a result of our models possessing relatively low regression coefficients as well as R2 values. The estimated R2 value came out to be 0.066, or roughly 6.60% of the data can be explained by the model provided. For specifically having a Pitocin-hurried birth, having a midwife present during childbirth only had a factor of 0.052 as its regression coefficient, displaying to have almost no relation (zero). Though slightly positive, due to this incredibly small relation, it can be deemed to have relatively small statistical effect on the outcome.

Figure 6: The relationship between Pitocin-hurried births and wanting a midwife.

fig_6
## `geom_smooth()` using formula = 'y ~ x'

Upon looking at the graph and the data, it strongly indicates that the relationship between Pitocin-hurried births and the retrospect of wanting a midwife during birth was statistically insignificant. This due to the fact of our models possessing relatively low regression coefficients as well as R2 values. The estimated R2 value came out to be 0.066, or roughly 6.60% of the data can be explained by the model provided. For specifically having a Pitocin-hurried birth, wanting a midwife present during childbirth only had a factor of -0.120 as its regression coefficient, displaying to have almost no relation (zero). Though slightly negative, due to this incredibly small relation, it can be deemed to have relatively small statistical effect on the outcome.

Figure 7a: The relationship between Pitocin-hurried births, education, and having a midwife.

fig_7a
## Don't know how to automatically pick scale for object of type <haven_labelled>.
## Defaulting to continuous.`geom_smooth()` using formula = 'y ~ x'

Figure 7b: The relationship between Pitocin-hurried births, education, and wanting a midwife.

fig_7b
## Don't know how to automatically pick scale for object of type <haven_labelled>.
## Defaulting to continuous.`geom_smooth()` using formula = 'y ~ x'

Figures 7a and 7b will be interpreted simultaneously because they are nearly the same graph with an exception of factoring along having and wanting a midwife. The regression analysis indicates that the relationship between Pitocin-hurried births and the education level of the mother was statistically significant. Visual analysis of the graph shows that as education level increases (a scale from having some high school education to being college educated), it was more likely for Pitocin to be administered during birth. The graph also shows depictions of an education coefficient being 0.080, which was statistically significant at the 0.01 level when regressed with Pitocin-hurried births. The factoring of having and wanting a midwife, while perhaps not as informative as other variables, points to the likelihood of a relationship between wanting midwifery and education level.

Figure 8: The relationship between wanting a midwife and education level.

model2 <- lm(wish_mid ~ mid_pit + Q1860 + Q1865, data = listening_data)
huxreg(model2, statistics = c(N = "nobs", R2 = "r.squared"))
(1)
(Intercept)0.187 * 
(0.087)  
mid_pit-0.122   
(0.067)  
Q18600.071 **
(0.025)  
Q18650.007   
(0.007)  
N217       
R20.108   
*** p < 0.001; ** p < 0.01; * p < 0.05.
fig_8
## Don't know how to automatically pick scale for object of type <haven_labelled>.
## Defaulting to continuous.`geom_smooth()` using formula = 'y ~ x'

In order to determine if there truly is a relationship between a mother’s education level and wanting a midwife, we chose to run another linear model. However, in this case, wanting a midwife was regressed on administered Pitocin, education level, as well as income. While there was not a relationship significantly different from no treatment, the coefficient for income was 0.071, which was statistically significant at the p < 0.01 level. This indicates as a mother’s education is increased, mothers tend to prefer midwifery care. The new R2 variable is .108, which means that 10.8% of the variability of wanting a midwife can be explained by the amount of education a mother has experienced.

Figure 9a: The relationship between Pitocin-hurried births, income, and having a midwife.

fig_9a
## Don't know how to automatically pick scale for object of type <haven_labelled>.
## Defaulting to continuous.`geom_smooth()` using formula = 'y ~ x'

Figure 9b: The relationship between Pitocin-hurried births, income, and wanting a midwife.

fig_9b
## Don't know how to automatically pick scale for object of type <haven_labelled>.
## Defaulting to continuous.`geom_smooth()` using formula = 'y ~ x'

Similar to 7a and 7b, we will look at 8a and 8b in a single interpretation given the similarities. Graph 8a and 8b are identical with the exception of the factoring of having a midwife and wanting a midwife. While the regression line may appear to be positively sloping, and therefore, indicative of a positive relationship between Pitocin-hurried births and income, the numbers of the linear regression model do not support such an inference. In fact, the coefficient of Pitocin-hurried births regressed on income, education, and having a midwife is in fact negative, with a value of -0.005. Therefore, there is not a significant relationship between hurried births and income.

Limitations and Other Factors

There remains the aspect of experimental externalities; some variables and their resulting effects are not completely accounted for within the experiment. Just from the data collection method alone, noted limitations were observed. The data was only collected in the state of California, only by those that could speak Spanish and/or English, had a child during 2016, had a way of responding to a survey over phone call, and responded back to the Listening To Mothers Survey. All of which more narrowly refining the scope instead of providing overall models and data applicable to all mothers. Though it can be initially deemed that California is a good state to run an experiment of this type on due to factors such as race, income, education, sheer population, and other measures, it still does not encompass every type of mother or birth-practice. Furthermore, all participants had to be over the age of 18, and because mothers can have children below that age, that also omits a group of individuals that can influence our final data. In fact, nearly 13% of all mothers in America are below the age of 18 (Pew Research Center 2018).

The age gap omission and the barriers to providing survey data such as the ability and time to give a phone call can drastically alter the income variables ran in our analyses as well. As both people who are under the age of 18 or those who do not possess the ability or money to have a cell phone could reasonably be assumed to have lower income than those who are above 18 and have capabilities of giving survey data via phone call. The Spanish/English barrier eliminates mothers who don’t belong to such a category from giving their data at all, influencing our estimations in multiple regards; as non Spanish/English speaking people have wide varied incomes and educational levels. Lastly, as seen in the Listening To Mothers Survey Data itself, for many of the administration or birth-practice questions, the answer of “I don’t know” was a choice. Though not necessarily medical malpractice, we do know that consent during birth is often forgotten or disregarded, especially when performed outside the midwife model of care.

From either language barriers, mental awareness of the mother, or other conditions we can conclude that mothers might not be able to remember choices or were not adequately informed about the actions of their provider. Because of this, the magnitude of any effect analyzed in birth is difficult to determine.

Conclusion

The initial hypothesis was incorrect but this experiment resulted in limited statistically significant relationships between the educational level of the mother and Pitocin usage, as well as either midwifery presence or the desire for midwifery care. Though the styles and practices involved in childbirth may have changed over time, there is still a deep connection to be explored between the mother, their background, and the models of care which bring children into the world.

References

Evidence on: Pitocin® During the Third Stage of Labor. (2020, June 23). Evidence Based Birth®. https://evidencebasedbirth.com/evidence-on-pitocin-during-the-third-stage-of-labor/

Hermann, A. (n.d.). Managing Labor with Pitocin: Medical Discourse and Decision-Making in Contemporary Clinical Settings. 99.

In Defense of Normal Birth. (2019, September 26). The Midwives Of New Jersey. https://midwivesofnj.com/in-defense-of-normal-birth/

Mansy, A. (2017). Does Labor Augmentation with Oxytocin Increase the Risk of Postpartum Hemorrhage? A Randomized Controlled Trial. Clinics in Mother and Child Health, 14(3). https://doi.org/10.4172/2090-7214.1000268

Pew Research Center. (2018, January 10). Women are delaying motherhood through their 20s. Pew Research Center’s Social & Demographic Trends Project. Retrieved November 30, 2021, from https://www.pewresearch.org/social-trends/2018/01/18/theyre-waiting-longer-but-u-s-women-today-more-likely-to-have-children-than-a-decade-ago/pstl_1-18-18-motherhood-01/

Thesis Expectations and Experiences of First-Time Mothers, Andrea Freund.pdf. (n.d.). Retrieved November 30, 2021, from https://scholarworks.iupui.edu/bitstream/handle/1805/1669/Thesis%20Expectations%20and%20Experiences%20of%20First-Time%20Mothers,%20Andrea%20Freund.pdf?sequence=2

LS0tCnRpdGxlOiAiTW90aGVy4oCZcyBDaG9pY2U6IFByZXNlbmNlIG9mIE1pZHdpZmUgQ2FyZSBhbmQgVXNlIG9mIHRoZSBCaXJ0aCBJbnRlcnZlbnRpb24gRHJ1ZyBQaXRvY2luIgphdXRob3I6ICJDZWxlc3RlIENvdWdobGluIgpkYXRlOiAiMzAvMTEvMjAyMSIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgaGlnaGxpZ2h0OiBweWdtZW50cwogICAgdGhlbWU6IHNwYWNlbGFiCiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdDogVFJVRQogICAgY29kZV9kb3dubG9hZDogVFJVRQogICAgY29kZV9mb2xkaW5nOiBzaG93Ci0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkob3BlbmludHJvKQpsaWJyYXJ5KGRhdGEudGFibGUpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoaHV4dGFibGUpCmxpYnJhcnkobW9kZWxzdW1tYXJ5KQpgYGAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBBYnN0cmFjdAoKQmFzZWQgb24gc3VydmV5IHJlc3BvbnNlcyBmcm9tIG1vdGhlcnMgd2hvIGdhdmUgYmlydGggaW4gdGhlIHN0YXRlIG9mIENhbGlmb3JuaWEgaW4gMjAxNiwgd2UgYW5hbHl6ZWQgdGhlIHVzZSBvZiBzeW50aGV0aWMgb3h5dG9jaW4gKFBpdG9jaW4pIGR1cmluZyBiaXJ0aCBhbmQgdGhlIHdheXMgaW4gd2hpY2ggUGl0b2NpbiB1c2FnZSBtaWdodCBjaGFuZ2Ugd2l0aCBkaWZmZXJlbmNlcyBpbiBtb3RoZXJzJyBpbmNvbWUsIGVkdWNhdGlvbiwgY2hvaWNlIG9mIGNhcmUgcHJvdmlkZXIsIGFuZCBmZWVsaW5ncyBvbiBjYXJlIHByb3ZpZGVycyBhZnRlciBiaXJ0aC4KCioqSHlwb3RoZXNpczoqKiBBbW9uZyB0aG9zZSB3aG8gaGFkIGEgbWlkd2lmZSBvciB3b3VsZCBoYXZlIHByZWZlcnJlZCB0byBoYXZlIGEgbWlkd2lmZSB0aGUgZHJ1ZyBQaXRvY2luIGlzIGFkbWluaXN0ZXJlZCBsZXNzLgoKKipSZXN1bHRzOioqIFdlIGRpZCBub3QgZmluZCBhIHNpZ25pZmljYW50IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBiaXJ0aCBwcm92aWRlcnMsIHRoZSBwcmVmZXJlbmNlIG9mIGJpcnRoIHByb3ZpZGVycywgYW5kIHRoZSB1c2Ugb2YgUGl0b2Npbi4gVGhlIGFuYWx5c2lzIGRvZXMgaW5kaWNhdGUgYSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGVkdWNhdGlvbiBsZXZlbCBhbmQgUGl0b2NpbiB1c2UgYXMgd2VsbCBhcyBlZHVjYXRpb24gbGV2ZWwgYW5kIG1pZHdpZmUgcHJlZmVyZW5jZS4gCgojIEludHJvZHVjdGlvbiAKVGhlIENoaWxkYmlydGggQ29ubmVjdGlvbiBQcm9ncmFtcyBhdCB0aGUgTmF0aW9uYWwgUGFydG5lcnNoaXAgZm9yIFdvbWVuICYgRmFtaWxpZXMgZGV2ZWxvcGVkIHRoZSBMaXN0ZW5pbmcgdG8gTW90aGVycyAyMDE2IHN1cnZleSBhbmQgY29sbGVjdGVkIHJlc3BvbnNlcyB1c2VkIGluIHRoaXMgcHJvamVjdCwgKGF2YWlsYWJsZSBoZXJlIGh0dHBzOi8vd3d3LmNoY2Yub3JnL2NvbGxlY3Rpb24vbGlzdGVuaW5nLXRvLW1vdGhlcnMtaW4tY2FsaWZvcm5pYS8pLiBUaGlzIHNhbXBsZSB3YXMgY29sbGVjdGVkIGJlY2F1c2Ugb2YgMSBvdXQgb2YgZXZlcnkgOCBpbmZhbnRzIGJvcm4gaW4gQW1lcmljYSBpcyBib3JuIGluIHRoZSBzdGF0ZSBvZiBDYWxpZm9ybmlhIChTdXJ2ZXkgRmFjdHNoZWV0IDIwMTgpLiBUaGUgZGF0YSBzZXQgdGh1cyBlbmFibGVzIHJlc2VhcmNoZXJzIHRvIGRyYXcgbGFyZ2VyIGNvbmNsdXNpb25zIGFib3V0IHByZWduYW5jeSwgbWF0ZXJuYWwgY2FyZSwgYW5kICBiaXJ0aCBpbnRlcnZlbnRpb25zIGluIG90aGVyIGFyZWFzIGFjcm9zcyB0aGUgY291bnRyeS4gClRoZSAgZGVwZW5kZW50IHZhcmlhYmxlIFBpdG9jaW4gd2FzIHNlbGVjdGVkIHRvIHJlcHJlc2VudCBtb2Rlcm4gYmlydGgsIHRoZSBkcnVnIGlzIHByZXNlbnQgaW4gYmlydGggc2V0dGluZ3Mgd2hpY2ggbm9ybWFsbHkgaW52b2x2ZSBob3NwaXRhbHMgYmVjYXVzZSBpdCBpcyBkZWxpdmVyZWQgaW50cmF2ZW5vdXNseS4gVGhpcyBtb2Rlcm4gdG91Y2ggc3RvbmUgaXMgY29tcGFyZWQgdG8gdGhlIHJvbGUgb2Ygb3RoZXIgIm5vbnRyYWRpdGlvbmFsIiBiaXJ0aCBjaG9pY2VzIGFuZCBwcmVmZXJlbmNlcyB3aXRoaW4gQ2FsaWZvcm5pYS0tIHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZS4gQWRkaXRpb25hbCBpbmRlcGVuZGVudCB2YXJpYWJsZXMgaW5jbHVkZWQgYXJlIHR5cGUgb2YgY2FyZSBwcm92aWRlciwgIGJpcnRoIGludGVydmVudGlvbnMsIGluY29tZSwgYW5kIGVkdWNhdGlvbi4gTW90aGVycyB3aG8gcmVzcG9uZGVkIGdhdmUgYmlydGggaW4gMjAxNiwgbGl2ZWQgaW4gQ2FsaWZvcm5pYSwgYW5kIHNwb2tlIGVpdGhlciBFbmdsaXNoIG9yIFNwYW5pc2guIFRoZSByb2xlIG9mIGNlcnRhaW4gZGVtb2dyYXBoaWMgZGF0YSBvbiBiaXJ0aCBjaG9pY2VzIGlzIGFuYWx5emVkIHRvIGFja25vd2xlZGdlIHRoZSBjaG9pY2VzIG9mIGEgbW90aGVyIGluIGFueSBiaXJ0aCBzZXR0aW5nIGJlaW5nIGFmZmVjdGVkIGJ5IHNvY2lvZWNvbm9taWMgYW5kIGN1bHR1cmFsIGZhY3RvcnMuIAoKV2UgaHlwb3RoZXNpemUgdGhhdCBtb3RoZXJzIHdpdGggbWlkd2l2ZXMgb3Igd2hvIHdpc2hlZCB0aGV5IGhhZCBhIG1pZHdpZmUgYXMgYSBwcm92aWRlciBoYWQgbGVzcyBtZWRpY2FsaXplZCBpbnRlcnZlbnRpb24sIHNwZWNpZmljYWxseSBQaXRvY2luLCBkdXJpbmcgdGhlaXIgYmlydGguIAojIEhpc3RvcnkKVGhlIGRpZmZlcmVuY2UgaW4gY2hpbGQgZGVsaXZlcnkgcHJhY3RpY2VzIGJldHdlZW4gb2JzdGV0cmljcyBwcmFjdGl0aW9uZXJzIGFuZCBtaWR3aXZlcyB2YXJpZXMgZ3JlYXRseS4gIldoaWxzdCBpdCBpcyBkaWZmaWN1bHQgdG8gY2F0ZWdvcmlzZSBtYXRlcm5pdHkgbW9kZWxzIG9mIGNhcmUgZXhjbHVzaXZlbHkgZHVlIHRvIHRoZSBpbmZsdWVuY2Ugb2YgZ2VuZXJpYyBwb2xpY2llcyBhbmQgZ3VpZGVsaW5lcywgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB1bmRlcnBpbm5pbmcgcGhpbG9zb3BoeSBvZiBhIG1pZHdpZmXigJBsZWQgbW9kZWwgb2YgY2FyZSBpcyBub3JtYWxpdHkgYW5kIHRoZSBuYXR1cmFsIGFiaWxpdHkgb2Ygd29tZW4gdG8gZXhwZXJpZW5jZSBiaXJ0aCB3aXRob3V0IHJvdXRpbmUgaW50ZXJ2ZW50aW9uLCIgKFNhbmRhbGwgMjAxNikuIFRoZSBpbnRlcnZlbnRpb25zIGFzc2Vzc2VkIGhlcmUgYXJlIG1vZGVybiBiaXJ0aCBpbnRlcnZlbnRpb25zLiBBcyBzdWNoLCB3ZSBmb2N1cyBvbiBhIGhpZ2hseSBtZWRpY2FsaXplZCBwcmFjdGljZTogdGhlIHVzZSBvZiBQaXRvY2luIGFzIGEgbWV0aG9kIG9mIGJpcnRoIGF1Z21lbnRhdGlvbi4gUGl0b2NpbiBpcyBhbiBpbnRyYXZlbm91c2x5IGFkbWluaXN0ZXJlZCBzeW50aGV0aWMgb3h5dG9jaW4gd2hpY2ggaXMgbWVhbnQgdG8gbWltaWMgdGhlIG5hdHVyYWwgb3h5dG9jaW4gcHJvZHVjZWQgYnkgbW90aGVycyBkdXJpbmcgbGFib3IgKE1hbnN5IDIwMTcpLiBUaGlzIHR5cGUgb2YgaW50ZXJ2ZW50aW9uIGltcGFjdHMgdGhlIGV4cGVyaWVuY2Ugb2YgbW90aGVycyBpbiBhIHdlbGwtZG9jdW1lbnRlZCBtYW5uZXIgdGhhbmtzIGxhcmdlbHkgdG8gc3VydmV5cyBsaWtlIExpc3RlbmluZyB0byBNb3RoZXJzIDIwMTYuCgpUbyBpbGx1c3RyYXRlLCBmaXJzdCB3ZSBoYXZlIENhcm9saW5lLCBhIG1vdGhlciB3aG9zZSBhbmVjZG90ZSB3YXMgY2hvc2VuIGZvciB0aGlzIHBhcGVyIGR1ZSB0byB0aGVpciBzaW1pbGFyIHNoYXJlZCBleHBlcmllbmNlIHdpdGggbWFueSBvdGhlciBtb3RoZXJzLiBDYXJvbGluZSBmZWx0IHByZXNzdXJlZCBpbnRvIGluZHVjdGlvbiBvbiBoZXIgZHVlIGRhdGUsIGFuZCB3YXMgdG9sZCBzaGUgd291bGQgYmUgZmluZS4gQ2Fyb2xpbmUgc2FpZCBpbiBhbiBpbnRlcnZpZXc6CgoqIlNvIHNoZSBkZWNpZGVkIHRvIGluZHVjZSBtZSBvbiBteSBkdWUgZGF0ZSwgYW5kIEkgcmVhbGx5IHdhcyBvcHBvc2VkIHRvIHRoYXQsIGp1c3QgYmVjYXVzZSBsaWtlIEkgdG9sZCB5b3UgSSBkaWRuJ3Qgd2FudCBhbnkgbWVkaWNhdGlvbnMgYW5kIHNoZSBpbnNpc3RlZCB0aGF0IGl0IHdvdWxkIGJlIGZpbmUsIG5vIHByb2JsZW0sIHRoaXMgaGFwcGVucyBhbGwgdGhlIHRpbWUsIGl0J3Mgbm8gYmlnIGRlYWwsIGFuZCBJIGp1c3QgZmVsdCBsaWtlIGZyb20gYSBoZWFsdGggc3RhbmRwb2ludCwgb25jZSB5b3UgaGF2ZSBvbmUgaW50ZXJ2ZW50aW9uLCBpdCBraW5kIG9mIHNub3diYWxscyBpbnRvIG5lZWRpbmcgYSBidW5jaCBvZiBvdGhlciBpbnRlcnZlbnRpb25zIGFuZCBJIGRpZG4ndCB3YW50IHRoYXQuIEFuZCBJIHJlYWxseSBkaWRuJ3Qgd2FudCBhIEMtc2VjdGlvbiBhbmQgdGhlbiBJIGRpZG4ndCB3YW50IGFuIGVwaWR1cmFsLCB0aGF0IGtpbmQgb2YgdGhpbmcuIEFuZCB0aGVuIGZyb20gYW4gaG9uZXN0eSBzdGFuZHBvaW50LCBJIHdhcyB3b3JyaWVkIGFib3V0IHdoYXQgc2hlIHdhcyB0ZWxsaW5nIG15IGluc3VyYW5jZSBjb21wYW55LiIqIChGcmV1bmQgMjAwOCkKCkNvbXBhcmF0aXZlbHksIGZpcnN0IHRpbWUgbW90aGVyIEplc3NpY2EgZmVsdCBtb3JlIGNvbWZvcnRhYmxlIHdpdGggaGVyIGRvdWxhIHdobyBtYWRlIHN1cmUgdG8gaW5mb3JtIGhlciBhYm91dCBlYWNoIHN0ZXAgaW4gdGhlIHByb2Nlc3MgYmVpbmcgcHJlc2VudGVkIHRvIGhlci4gU2hlIHNhaWQgaW4gYW4gaW50ZXJ2aWV3OgoKKiJNeSBkb2N0b3IgcmVhbGx5IGRpZG4ndCBnbyBpbnRvIGl0IHNvIG11Y2ggd2l0aCBtZSBhYm91dCB0aGUgbGFjayBvZiBwYWluIGJsb2NraW5nIGhvcm1vbmVzIFt3aGVuIGxhYm9yIGlzIGluZHVjZWRdLCBidXQgbXkgZG91bGE7IHNoZSBleHBsYWluZWQgdG8gbWUgdGhhdCBpdCB3b3VsZCBiZSB2ZXJ5IGRpZmZpY3VsdC4iKiAoRnJldW5kIDIwMDgpLgoKUmVzZWFyY2ggc2hvd3MgdGhlICJ1c2Ugb2Ygb3h5dG9jaW4gaW4gbGFib3IgYXVnbWVudGF0aW9uIGluY3JlYXNlcyB0aGUgdm9sdW1lIG9mIGJsb29kIGxvc3MsIiAoTWFuc3kgMjAxNykuIFVzZSBvZiBzeW50aGV0aWMgb3h5dG9jaW4gYXMgYSBsYWJvciBpbnRlcnZlbnRpb24gcHJhY3RpY2Ugd2FzIHByZXNlbnQgaW4gMjclIG9mIHJlc3BvbnNlcyBpbiBvdXIgc2FtcGxlLiBUaGVzZSByZXNwb25zZXMgcmVwcmVzZW50IGEga2V5IGNvbXBhcmlzb24gcG9pbnQgYmV0d2VlbiBvdXIgdmFyaWFibGVzLS0tc3RpbGwsIGV4cGVydHMgaW5zaXN0ICJpbiBsb3cgcmlzayB3b21lbiwgaW5kdWN0aW9uIG9mIGxhYm9yLCByZWdhcmRsZXNzIG9mIHRoZSBtZXRob2QgdXNlZCwgaXMgYXNzb2NpYXRlZCB3aXRoIGEgaGlnaGVyIHJpc2sgb2YgUFBIIFtwb3N0cGFydHVtIGhlbW9ycmhhZ2VdIHRoYW4gc3BvbnRhbmVvdXMgbGFib3IiIChNYW5zeSAyMDE3KS4KCldoeSBtYXkgcHJvdmlkZXJzIHVzZSBQaXRvY2luIGluIHRoZSBmaXJzdCBwbGFjZT8gUGl0b2NpbiBpcyBkZXZlbG9wZWQgcGVyZmVjdGx5IG1pbWljIHRoZSBuYXR1cmFsbHkgb2NjdXJyaW5nIG94eXRvY2luIHRoYXQgaXMgcHJvZHVjZWQgYnkgYWN0aXZhdGluZyB0aGUgcGFyYXN5bXBhdGhldGljIG5lcnZvdXMgc3lzdGVtLiBCb3RoIHRoZSBuYXR1cmFsIG94eXRvY2luIGFuZCB0aGUgc3ludGhldGljIFBpdG9jaW4gaW5kdWNlIGNvbnRyYWN0aW9ucyBuZWNlc3NhcnkgZm9yIGxhYm9yLiBUaGUgcGFyYXN5bXBhdGhldGljIHN5c3RlbSByZXNwb25zZSBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciB0aGUgaG9ybW9uYWwgYW5kIGNoZW1pY2FsIGJhbGFuY2Ugb2YgdGhlIHBlcnNvbiBnaXZpbmcgYmlydGguIFRoaXMgaXMgdGhlIGZ1bmRhbWVudGFsIGRpZmZlcmVuY2U6IHdoaWxlIHRoZSBuYXR1cmFsbHkgb2NjdXJyaW5nIG94eXRvY2luIGNvbWVzIGZyb20gdGhlIHBpdHVpdGFyeSBnbGFuZCBpdCByZWR1Y2VzIGFueGlldHksIHN0cmVzcywgYW5kIHBhaW4sIHRoZSBzeW50aGV0aWMgdmVyc2lvbiBvZiBveHl0b2NpbiBkb2VzIG5vdCBjcm9zcyB0aGUgYmxvb2QgYnJhaW4gYmFycmllciBhbmQgZG9lcyBub3QgcmVsZWFzZSB0aGUgc2FtZSBzdHJlc3MgYW5kIHBhaW4gcmVsaWV2aW5nIGhvcm1vbmVzIGFzIG5hdHVyYWxseS1vY2N1cnJpbmcgb3h5dG9jaW4uIChEZWtrZXIgMjAyMCkuICBQaXRvY2luLCB0aGVyZWZvcmUsIHNlcnZlcyBhIGhpZ2hseSBwaHlzaW9sb2dpY2FsIGZ1bmN0aW9uIGluIGl0cyBhYmlsaXR5IHRvIGluc3RpZ2F0ZSB1dGVyaW5lIGNvbnRyYWN0aW9ucyBidXQgcHJvdmlkZXMgbm9uZSBvZiB0aGUgcHN5Y2hvbG9naWNhbCBiZW5lZml0cy4gQWRtaW5pc3RyYXRpb24gb2YgUGl0b2NpbiBjYW4gYWxzbyBiZSB1c2VkIHRvIGNvbnRyb2wgYSBudW1iZXIgb2YgcG9zdHBhcnR1bSBpc3N1ZXMgaW5jbHVkaW5nIGluZHVjaW5nIHRoZSBkZWxpdmVyeSBvZiB0aGUgcGxhY2VudGEgYW5kIGhlbW9ycmhhZ2luZy4KCiMjIyBEYXRhCgpUaGUga2V5IHZhcmlhYmxlcyBzZWxlY3RlZCBhbmQgYW5hbHl6ZWQgZnJvbSB0aGUgc3VydmV5IGRhdGEgYXJlIHNob3duIGhlcmU6CgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQpWYXJpYWJsZSA8LSBjKCJRODA1IiwgIlE4MTUiLCAiUTExMTFjIiwgIlExODMwYiIsICJRMTg2MCIsICJRMTg2NSIsICJoYWRfbWlkIiwgIndpc2hfbWlkIiwgInByZV9waXQiLCAibWlkX3BpdCIpCkV4cGxhbmF0aW9uIDwtIGMoIldoaWNoIHR5cGUgb2YgbWF0ZXJuaXR5IGNhcmUgcHJvdmlkZXIgbW9zdCBvZnRlbiBwcm92aWRlZCB5b3VyIGNhcmUgZHVyaW5nIHByZWduYW5jeT8gW0Fuc3dlcjogNCAtIEEgbWlkd2lmZSAoY291bGQgYmUgY2FsbGVkIENOTSldIiwgIldoaWNoIHR5cGUgb2YgcHJvdmlkZXIgZG8geW91IHdpc2ggeW91IGhhZD8gW0Fuc3dlcjogMyAtIChNaWR3aWZlIChDTk0pKV0iLCAiSG93IGRpZCB5b3VyIG1hdGVybml0eSBjYXJlIHByb3ZpZGVyIHRyeSB0byBzdGFydCB5b3VyIGxhYm9yPyBQbGVhc2Ugc2VsZWN0IGFsbCB0aGF0IGFwcGx5LiBbQW5zd2VyOiAzIC0gR2F2ZSB0aGUgbWVkaWNpbmUgUGl0b2NpbiAo4oCccGl04oCdIG9yIG94eXRvY2luKSB0aHJvdWdoIGFuIElWIGRyaXAgYmVmb3JlIHRoZSBzdGFydCBvZiBsYWJvciBjb250cmFjdGlvbnMpIiwgIlRoaW5raW5nIG9mIHlvdXIgcmVjZW50IHByZWduYW5jeSBhbmQgYmlydGgsIHdoYXQgYXJlIHRoZSB0b3RhbCBjb3N0cyB5b3UgaGF2ZSBiZWVuIGFza2VkIHRvIHBheSB5b3Vyc2VsZiBmb3IgYW55IG9mIHlvdXIgbWF0ZXJuaXR5IGNhcmUgcHJvdmlkZXJzIGFuZCBob3NwaXRhbCBiaWxscyBmb3IgeW91IGFuZCB5b3VyIGJhYnk/IFBsZWFzZSBpbmNsdWRlIGJpbGxzIGFscmVhZHkgcGFpZCBhbmQgYmlsbHMgb3dlZC4gUGxlYXNlIGRvIG5vdCBpbmNsdWRlIHRoZSBjb3N0IG9mIGJ1eWluZyB5b3VyIGhlYWx0aCBpbnN1cmFuY2UuIElmIHlvdSBhcmUgbm90IHN1cmUsIGdpdmUgeW91ciBiZXN0IGd1ZXNzLiIsICJXaGF0IGlzIHRoZSBoaWdoZXN0IGxldmVsIG9mIGVkdWNhdGlvbiB5b3UgaGF2ZSBjb21wbGV0ZWQgb3IgdGhlIGhpZ2hlc3QgZGVncmVlIHlvdSBoYXZlIHJlY2VpdmVkPyIsICJXaGljaCBvZiB0aGUgZm9sbG93aW5nIGluY29tZSBjYXRlZ29yaWVzIGJlc3QgZGVzY3JpYmVzIHlvdXIgdG90YWwgMjAxNiBob3VzZWhvbGQgaW5jb21lIGJlZm9yZSB0YXhlcz8gSWYgeW91IGRvIG5vdCBrbm93LCBwbGVhc2UgZ2l2ZSB5b3VyIGJlc3QgZ3Vlc3MuIiwgIkhhZCBhIG1pZHdpZmUgZHVyaW5nIGNoaWxkYmlydGgiLCAiV2FudGVkIGEgbWlkd2lmZSBkdXJpbmcgY2hpbGRiaXJ0aCIsICJBZG1pbmlzdGVyZWQgUGl0b2NpbiBiZWZvcmUgY2hpbGRiaXJ0aCIsICJBZG1pbmlzdGVyZWQgUGl0b2NpbiBkdXJpbmcgY2hpbGRiaXJ0aCIpCgpkZiA8LSBkYXRhLmZyYW1lKFZhcmlhYmxlLCBFeHBsYW5hdGlvbikKYGBgCgpgYGB7cn0KZGYKYGBgCgojIFJlc3VsdHMKCiMjIERlc2NyaXB0aXZlIFN0YXRpc3RpY3MKCiMjIyBGaWd1cmUgMQoKU3VydmV5IHJlc3BvbnNlcyB3ZXJlIGFuYWx5emVkIGRlc2NyaXB0aXZlbHksIGZvY3VzaW5nIG9uIHBlcmNlbnRhZ2VzIG9mIG1vdGhlcnMgd2hvIHJlc3BvbmRlZCB0byBxdWVzdGlvbnMgaW4gY2VydGFpbiB3YXlzLiBJbiByZXNwb25zZSB0byBRNzA1LCB3aGljaCBhc2tlZCByZXNwb25kZW50cyBpZiB0aGV5IGhhZCBhIGNob2ljZSBpbiB0aGVpciBtYXRlcm5pdHkgY2FyZSBwcm92aWRlciwgYWJvdXQgMjAlIG9mIG1vdGhlcnMgc3RhdGVkIHRoZXkgZGlkIG5vdCBoYXZlIGEgY2hvaWNlIGJlY2F1c2UgdGhlaXIgcHJvdmlkZXIgd2FzIGFzc2lnbmVkIHRvIHRoZW0uIEZpZ3VyZSAxIHNob3dzIHRoYXQgdGhlIG1ham9yaXR5IG9mIG1vdGhlcnMgd2hvIHRvb2sgdGhpcyBzdXJ2ZXkgbW9zdCBvZnRlbiByZWNlaXZlZCBjYXJlIGZyb20gYW4gT0ItR1lOLiBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBmaW5kaW5ncyBmcm9tIGV4aXN0aW5nIHJlc2VhcmNoLCB3aGljaCBwb2ludCB0byB0aGUgb3ZlcmFsbCB0cmVuZCBvZiBtZWRpY2FsaXplZCBiaXJ0aCBzZXR0aW5ncy4gSG93ZXZlciwgdGhlIHNlY29uZCBsYXJnZXN0IGNhdGVnb3J5IG9mIGNhcmUgcHJvdmlkZXJzIHJlcG9ydGVkIGluIHRoaXMgc3VydmV5IHdhcyBtaWR3aXZlcy4gVGhpcyBhbHNvIGZvbGxvd3MgZ3JlYXRlciBwb3B1bGF0aW9uIHRyZW5kcy4KCmBgYHtyfQpzbGljZXMgPC0gYygxOTc2LCA1MiwgOTcsIDIyMSwgMTQ1LCAyNykKbGJscyA8LSBjKCJPQi1HWU4iLCAiRmFtaWx5IERvY3RvciIsIk1pZHdpZmUiLCAiTnVyc2UgUHJhY3RpY2lvbmVyIiwgIlBoeXNpY2lhbnMgQXNzaXN0YW50IiwgIk90aGVyIikKcGN0IDwtIHJvdW5kKHNsaWNlcy9zdW0oc2xpY2VzKSoxMDApCmxibHMgPC0gcGFzdGUobGJscywgcGN0KQpsYmxzIDwtIHBhc3RlKGxibHMsICIlIiwgc2VwPSIiKQpwaWUoc2xpY2VzLCBpbml0LmFuZ2xlID0gMTAwLGxhYmVscyA9IGxibHMsIG1haW4gPSAiUTgwNTogV2hhdCB0eXBlIG9mIG1hdGVybml0eSBjYXJlIHByb3ZpZGVyIGRpZCB5b3UgaGF2ZT8iKQogCmBgYAoKIyMjIEZpZ3VyZSAyCgpgYGB7cn0Kc2xpY2VzIDwtIGMoOTIsIDI3LCAxNDIsIDgsIDIsIDMwKQpsYmxzIDwtIGMoIk9CLUdZTiIsICJGYW1pbHkgRG9jdG9yIiwiTWlkd2lmZSIsICJOdXJzZSBQcmFjdGljaW9uZXIiLCAiUGh5c2ljaWFucyBBc3Npc3RhbnQiLCAiT3RoZXIiKQpwY3QgPC0gcm91bmQoc2xpY2VzL3N1bShzbGljZXMpKjEwMCkKbGJscyA8LSBwYXN0ZShsYmxzLCBwY3QpCmxibHMgPC0gcGFzdGUobGJscywgIiUiLCBzZXA9IiIpCnBpZShzbGljZXMsIGluaXQuYW5nbGUgPSAyNSxsYWJlbHMgPSBsYmxzLCBtYWluID0gIlE4MTU6IFdoaWNoIHR5cGUgb2YgcHJvdmlkZXIgZG8geW91IHdpc2ggeW91IGhhZD8iLCBzdWI9ICJSZXNwb25kZW50cyBhbnN3ZXJlZCAxIChZZXMpIHRvIFE4MTEsIERpZCB5b3Ugd2lzaCB5b3UgaGFkIGEgZGlmZmVyZW50IHByb3ZpZGVyPyIpCmBgYAojIyMgRmlndXJlIDMKT3ZlcmFsbCwgMTIlIG9mIHN1cnZleSByZXNwb25kZW50cyB3aXNoZWQgdGhleSBoYWQgYSBkaWZmZXJlbnQgdHlwZSBvZiBtYXRlcm5pdHkgY2FyZSBwcm92aWRlciB0aGFuIHRoZSBvbmUgdGhleSBoYWQuIEZyb20gRmlndXJlIDIsIGl0IGlzIHNob3duIHRoYXQgYWxtb3N0IGhhbGYgb2YgcmVzcG9uZGVudHMgd2hvIGRpZCB3YW50IGEgZGlmZmVyZW50IGNhcmUgcHJvdmlkZXIgd2lzaGVkIHRoZXkgaGFkIGEgbWlkd2lmZS4gQSBmb2xsb3d1cCBxdWVzdGlvbiB3YXMgYXNrZWQgKFE4MTYpIHRvIGV2YWx1YXRlIHBvc3NpYmxlIHJlYXNvbnMgd2h5IG1vdGhlcnMgZGlkIG5vdCBoYXZlIGEgbWlkd2lmZSBpZiB0aGV5IHByZWZlcnJlZCBvbmUuIEZpZ3VyZSAzIHN1Z2dlc3RzIHRoYXQgdGhlIG1vc3QgcG9wdWxhciByZWFzb24gd2FzIHRoYXQgcmVzcG9uZGVudHMgZGlkIG5vdCB0aGluayB0aGF0IHRoZWlyIGhlYWx0aCBpbnN1cmFuY2UgcGxhbiB3b3VsZCBjb3ZlciB0aGUgc2VydmljZXMgb2YgYSBtaWR3aWZlLiBPdGhlciBoaWdobHkgY2l0ZWQgcmVhc29ucyBpbmNsdWRlZDogIkFub3RoZXIgdHlwZSBvZiBtYXRlcm5pdHkgY2FyZSBwcm92aWRlciB3YXMgYXNzaWduZWQgdG8gbWUiIGFuZCAiSSBuZWVkZWQgYSBkb2N0b3IgYmVjYXVzZSBvZiBteSBoZWFsdGggcHJvYmxlbXMiLiBcIyMjIEZpZ3VyZSAzCgpgYGB7cn0KSCA8LSBjKDc3LCAyMCwgMTUsIDIxLCAzOSwgMjksIDMwLCAzMykKTiA8LSBjKCJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIsICJnIiwgImgiKQpsYmxzODE2IDwtIAogIApiYXJwbG90KEgsbmFtZXMuYXJnPU4seGxhYj0iUmVzcG9uc2UiLCB5bGFiPSJOdW1iZXIgb2YgcmVzcG9uZGVudHMiLCBjb2w9ImdyZXkiLCBtYWluPSJRODE2OiBXaHkgZGlkbid0IHlvdSBoYXZlIGEgbWlkd2lmZSBhcyB5b3VyIG1hdGVybml0eSBjYXJlIHByb3ZpZGVyPyIsIHN1Yj0gIlJlc3BvbmRlbnRzIHRoYXQgYW5zd2VyZWQgMyAoTWlkd2lmZSkgZm9yIFE4MTUsIFdoaWNoIHR5cGUgb2YgcHJvdmlkZXIgZGlkIHlvdSB3aXNoIHlvdSBoYWQ/IiwgYm9yZGVyPSJibGFjayIpCmBgYAoKKipLZXkqKgoKYS0gSSBkaWRuJ3QgdGhpbmsgbXkgaGVhbHRoIGluc3VyYW5jZSBwbGFuIHBhaWQgZm9yIHNlcnZpY2VzIG9mIGEgbWlkd2lmZQoKYi0gSSBkaWRuJ3QgdGhpbmsgdGhhdCBhIG1pZHdpZmUgY291bGQgcHJhY3RpY2UgaW4gYSBob3NwaXRhbAoKYy0gSSBkaWRuJ3QgdGhpbmsgdGhhdCBJIGNvdWxkIGhhdmUgYW4gZXBpZHVyYWwgd2l0aCBhIG1pZHdpZmUKCmQtIEkgZGlkbid0IGtub3cgd2hhdCB3b3VsZCBoYXBwZW4gaWYgSSBuZWVkZWQgYSBkb2N0b3IgKGZvciBleGFtcGxlLCBmb3IgYSBjLXNlY3Rpb24pCgplLSBBbm90aGVyIHR5cGUgb2YgbWF0ZXJuaXR5IGNhcmUgcHJvdmlkZXIgd2FzIGFzc2lnbmVkIHRvIG1lCgpmLSBBIG1pZHdpZmUgd2FzIG5vdCBhdmFpbGFibGUKCmctIEkgbmVlZGVkIGEgZG9jdG9yIGJlY2F1c2Ugb2YgbXkgaGVhbHRoIHByb2JsZW1zCgpoLSBPdGhlciByZWFzb24KCiMjIyBGaWd1cmUgNAoKRmluYWxseSwgZGVzY3JpcHRpdmUgc3RhdGlzdGljcyBwcm92aWRlZCBhIHZpc3VhbGl6YXRpb24gb2YgYmlydGggaW50ZXJ2ZW50aW9ucy4gT2Ygc3VydmV5IHJlc3BvbmRlbnRzLCAzOSUgcmVwb3J0ZWQgdGhlaXIgbWF0ZXJuaXR5IGNhcmUgcHJvdmlkZXIgYXR0ZW1wdGVkIHRvIGluZHVjZSBsYWJvciBpbiBzb21lIHdheS4gRmlndXJlIDQgcmVwcmVzZW50cyB0aGUgYnJlYWtkb3duIG9mIGxhYm9yIHN0YXJ0aW5nIG1ldGhvZHMgZW1wbG95ZWQgYnkgdGhlIGJpcnRoIHByb3ZpZGVyIHByZXNlbnQuIDI3JSAobj02NzMpIG9mIHBlb3BsZSB3aG8gc2FpZCB0aGF0IHRoZWlyIGxhYm9yIHdhcyBpbmR1Y2VkIGJ5IHRoZWlyIHByb3ZpZGVyIGluZGljYXRlZCB0aGF0IFBpdG9jaW4gd2FzIHVzZWQuIENvbXBhcmF0aXZlbHksIDM0JSAobj04NjkpIG9mIG1vdGhlcnMgcmVwb3J0ZWQgUGl0b2NpbiB1c2UgdG8gaHVycnkgdGhlaXIgYmlydGggaW4gdGhlIGxhdGVyIHN0YWdlcyBvZiBsYWJvci4KCmBgYHtyfQpMIDwtIGMoMzk0LCAyNTMsIDY3MywgMTg4LCA1MSkKTSA8LSBjKCJhIiwgImIiLCAiYyIsICJkIiwgImUiKQpiYXJwbG90KEwsbmFtZXMuYXJnPU0seGxhYj0iUmVzcG9uc2UiLCB5bGFiPSJOdW1iZXIgb2YgcmVzcG9uZGVudHMiLCBjb2w9ImdyZXkiLCBtYWluPSJRMTExMTogSG93IGRpZCB5b3VyIG1hdGVybml0eSBjYXJlIHByb3ZpZGVyIHRyeSB0byBzdGFydCB5b3VyIGxhYm9yPyIsIHN1YiA9ICJSZXNwb25kZW50cyBhbnN3ZXJlZCAxIChZZXMpIHRvIFExMTEwLCBEaWQgeW91ciBtYXRlcm5pdHkgY2FyZSBwcm92aWRlciB0cnkgdG8gaW5kdWNlIHlvdXIgbGFib3IgaW4gYW55IHdheT8iLCBib3JkZXI9ImJsYWNrIikKYGBgCgoqKktleSoqCgphLSBJbnNlcnRlZCBhIGZpbmdlciBpbiB0byB0aGUgb3BlbmluZyB0byBteSB3b21iIChjZXJ2aXgpIHRvICJzd2VlcCIgb3IgInN0cmlwIiB0aGUgbWVtYnJhbmVzIGxvb3NlCgpiLSBCcm9rZSBhbmQgcmVsZWFzZWQgbXkgd2F0ZXIgYmVmb3JlIHRoZSBzdGFydCBvZiBsYWJvciBjb250cmFjdGlvbnMKCmMtIEdhdmUgdGhlIG1lZGljaW5lIFBpdG9jaW4gdGhyb3VnaCBhbiBJViBkcmlwIGJlZm9yZSB0aGUgc3RhcnQgb2YgbGFib3IgY29udHJhY3Rpb25zCgpkLSBUcmllZCB0byBzdGFydCBteSBsYWJvciBzb21lIG90aGVyIHdheQoKZS0gTm90IHN1cmUgaG93CgojIyBSZWdyZXNzaW9uIEFuYWx5c2lzCgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQpsb2FkKCJMVE1kYXRhLlB1YmxpYyBWZXJzaW9uRklOQUwuUkRhdGEiKQpsaXN0ZW5pbmdfZGF0YSA8LSB0YWJsZSAlPiUKICAgIHNlbGVjdChjKFE4MDUsUTgxNSxRMTExMWMsUTExMzBiLCBRMTg2MCwgUTE4NjUpKSAKbGlzdGVuaW5nX2RhdGEkaGFkX21pZCA8LSBpZmVsc2UobGlzdGVuaW5nX2RhdGEkUTgwNSA9PSAnNCcsIDEsIDApCmxpc3RlbmluZ19kYXRhJHdpc2hfbWlkIDwtIGlmZWxzZShsaXN0ZW5pbmdfZGF0YSRRODE1ID09ICczJywgMSwgMCkKbGlzdGVuaW5nX2RhdGEkcHJlX3BpdCA8LSBpZmVsc2UobGlzdGVuaW5nX2RhdGEkUTExMTFjID09ICcxJywgMSwgMCkKbGlzdGVuaW5nX2RhdGEkbWlkX3BpdCA8LSBpZmVsc2UobGlzdGVuaW5nX2RhdGEkUTExMzBiID09ICcxJywgMSwgMCkKYGBgCgpSZWxhdGlvbnNoaXAocykgd2VyZSBjYWxjdWxhdGVkIG92ZXIgdGhlIG1vc3QgaW1wb3J0YW50IHZhcmlhYmxlcyBpbmNsdWRpbmcgaW5jb21lLCBQaXRvY2luIHVzYWdlLCB3YW50aW5nIGEgbWlkd2lmZSwgaGF2aW5nIGEgbWlkd2lmZSwgYW5kIGVkdWNhdGlvbiBsZXZlbHMuIFRoZXNlIHdlcmUgYW5hbHl6ZWQgYW5kIHJlZ3Jlc3NlZCBpbiBvcmRlciB0byBkZXRlcm1pbmUgYW55IHNvcnQgb2YgbW9kZWxzIGFuZCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGZhY3RvcnMuCgpgYGB7cn0KbW9kZWwxIDwtIGxtKG1pZF9waXQgfiBoYWRfbWlkICsgd2lzaF9taWQgKyBRMTg2MCArIFExODY1LCBkYXRhID0gbGlzdGVuaW5nX2RhdGEpCmh1eHJlZyhtb2RlbDEsIHN0YXRpc3RpY3MgPSBjKE4gPSAibm9icyIsIFIyID0gInIuc3F1YXJlZCIpKQpgYGAKCiMjIyBGaWd1cmUgNTogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFBpdG9jaW4taHVycmllZCBiaXJ0aCBhbmQgaGF2aW5nIGEgbWlkd2lmZS4KCmBgYHtyLCBpbmNsdWRlID0gRkFMU0V9CmZpZ181IDwtIGdncGxvdChkYXRhID0gbmEub21pdChsaXN0ZW5pbmdfZGF0YVssYygibWlkX3BpdCIsICJoYWRfbWlkIildKSwgYWVzKHkgPSBqaXR0ZXIobWlkX3BpdCksIHggPSAoaGFkX21pZCkpKSArIAogIGdlb21fcG9pbnQoc2l6ZSA9IDUsIGFscGhhID0gLjA1KSArCiAgdGhlbWVfY2xhc3NpYygpICsKICBsYWJzKHggPSAiSGFkIGEgTWlkd2lmZSIsIHkgPSAiUGl0b2NpbiBVc2VkIHRvIEh1cnJ5IEJpcnRoIiwgdGl0bGUgPSAiUmVsYXRpb25zaGlwIGJldHdlZW4gSGF2aW5nIGEgTWlkd2lmZSBhbmQgUGl0b2NpbiBIdXJyaWVkIEJpcnRoIikgKwogIHRoZW1lKGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSkgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gImJsdWUiKQpgYGAKCmBgYHtyfQpmaWdfNQpgYGAKClVwb24gbG9va2luZyBhdCB0aGUgZ3JhcGggYW5kIHRoZSBkYXRhLCBpdCBzdHJvbmdseSBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gUGl0b2Npbi1odXJyaWVkIGJpcnRocyBhbmQgdGhlIHByZXNlbmNlIG9mIGhhdmluZyBhIG1pZHdpZmUgZHVyaW5nIGJpcnRoIHdhcyBzdGF0aXN0aWNhbGx5IGluc2lnbmlmaWNhbnQuIFRoaXMgaXMgYSByZXN1bHQgb2Ygb3VyIG1vZGVscyBwb3NzZXNzaW5nIHJlbGF0aXZlbHkgbG93IHJlZ3Jlc3Npb24gY29lZmZpY2llbnRzIGFzIHdlbGwgYXMgUjIgdmFsdWVzLiBUaGUgZXN0aW1hdGVkIFIyIHZhbHVlIGNhbWUgb3V0IHRvIGJlIDAuMDY2LCBvciByb3VnaGx5IDYuNjAlIG9mIHRoZSBkYXRhIGNhbiBiZSBleHBsYWluZWQgYnkgdGhlIG1vZGVsIHByb3ZpZGVkLiBGb3Igc3BlY2lmaWNhbGx5IGhhdmluZyBhIFBpdG9jaW4taHVycmllZCBiaXJ0aCwgaGF2aW5nIGEgbWlkd2lmZSBwcmVzZW50IGR1cmluZyBjaGlsZGJpcnRoIG9ubHkgaGFkIGEgZmFjdG9yIG9mIDAuMDUyIGFzIGl0cyByZWdyZXNzaW9uIGNvZWZmaWNpZW50LCBkaXNwbGF5aW5nIHRvIGhhdmUgYWxtb3N0IG5vIHJlbGF0aW9uICh6ZXJvKS4gVGhvdWdoIHNsaWdodGx5IHBvc2l0aXZlLCBkdWUgdG8gdGhpcyBpbmNyZWRpYmx5IHNtYWxsIHJlbGF0aW9uLCBpdCBjYW4gYmUgZGVlbWVkIHRvIGhhdmUgcmVsYXRpdmVseSBzbWFsbCBzdGF0aXN0aWNhbCBlZmZlY3Qgb24gdGhlIG91dGNvbWUuCgojIyMgRmlndXJlIDY6IFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBQaXRvY2luLWh1cnJpZWQgYmlydGhzIGFuZCB3YW50aW5nIGEgbWlkd2lmZS4KCmBgYHtyLCBpbmNsdWRlID1GQUxTRX0KZmlnXzYgPC0gZ2dwbG90KGRhdGEgPSBuYS5vbWl0KGxpc3RlbmluZ19kYXRhWywgYygibWlkX3BpdCIsICJ3aXNoX21pZCIpXSksIGFlcyh5ID0gaml0dGVyKG1pZF9waXQpLCB4ID0gKHdpc2hfbWlkKSkpICsgCiAgZ2VvbV9wb2ludChzaXplID0gNSwgYWxwaGEgPSAuMDUpICsKICB0aGVtZV9jbGFzc2ljKCkgKwogIGxhYnMoeCA9ICJXYW50ZWQgYSBNaWR3aWZlIiwgeSA9ICJQaXRvY2luIFVzZWQgdG8gSHVycnkgQmlydGgiLCB0aXRsZSA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBXYW50aW5nIGEgTWlkd2lmZSBhbmQgUGl0b2NpbiBIdXJyaWVkIEJpcnRoIikgKwogIHRoZW1lKGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSkgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gImJsdWUiKQpgYGAKCmBgYHtyfQpmaWdfNgpgYGAKClVwb24gbG9va2luZyBhdCB0aGUgZ3JhcGggYW5kIHRoZSBkYXRhLCBpdCBzdHJvbmdseSBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gUGl0b2Npbi1odXJyaWVkIGJpcnRocyBhbmQgdGhlIHJldHJvc3BlY3Qgb2Ygd2FudGluZyBhIG1pZHdpZmUgZHVyaW5nIGJpcnRoIHdhcyBzdGF0aXN0aWNhbGx5IGluc2lnbmlmaWNhbnQuIFRoaXMgZHVlIHRvIHRoZSBmYWN0IG9mIG91ciBtb2RlbHMgcG9zc2Vzc2luZyByZWxhdGl2ZWx5IGxvdyByZWdyZXNzaW9uIGNvZWZmaWNpZW50cyBhcyB3ZWxsIGFzIFIyIHZhbHVlcy4gVGhlIGVzdGltYXRlZCBSMiB2YWx1ZSBjYW1lIG91dCB0byBiZSAwLjA2Niwgb3Igcm91Z2hseSA2LjYwJSBvZiB0aGUgZGF0YSBjYW4gYmUgZXhwbGFpbmVkIGJ5IHRoZSBtb2RlbCBwcm92aWRlZC4gRm9yIHNwZWNpZmljYWxseSBoYXZpbmcgYSBQaXRvY2luLWh1cnJpZWQgYmlydGgsIHdhbnRpbmcgYSBtaWR3aWZlIHByZXNlbnQgZHVyaW5nIGNoaWxkYmlydGggb25seSBoYWQgYSBmYWN0b3Igb2YgLTAuMTIwIGFzIGl0cyByZWdyZXNzaW9uIGNvZWZmaWNpZW50LCBkaXNwbGF5aW5nIHRvIGhhdmUgYWxtb3N0IG5vIHJlbGF0aW9uICh6ZXJvKS4gVGhvdWdoIHNsaWdodGx5IG5lZ2F0aXZlLCBkdWUgdG8gdGhpcyBpbmNyZWRpYmx5IHNtYWxsIHJlbGF0aW9uLCBpdCBjYW4gYmUgZGVlbWVkIHRvIGhhdmUgcmVsYXRpdmVseSBzbWFsbCBzdGF0aXN0aWNhbCBlZmZlY3Qgb24gdGhlIG91dGNvbWUuCgojIyMgRmlndXJlIDdhOiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gUGl0b2Npbi1odXJyaWVkIGJpcnRocywgZWR1Y2F0aW9uLCBhbmQgaGF2aW5nIGEgbWlkd2lmZS4KCmBgYHtyLCBpbmNsdWRlID1GQUxTRX0KZmlnXzdhIDwtIGdncGxvdChkYXRhID0gbmEub21pdChsaXN0ZW5pbmdfZGF0YVssIGMoIlExODYwIiwgIm1pZF9waXQiLCAiaGFkX21pZCIpXSksIGFlcyh4ID0gaml0dGVyKFExODYwKSwgeSA9IGppdHRlcihtaWRfcGl0KSkpICsgCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBhcy5mYWN0b3IoaGFkX21pZCkpLCBzaXplID0gNSwgYWxwaGEgPSAwLjIpICsKICB0aGVtZV9jbGFzc2ljKCkgKwogIGxhYnMoeCA9ICJFZHVjYXRpb24gTGV2ZWwiLCB5ID0gIlBpdG9jaW4tSHVycmllZCBCaXJ0aHMiLCB0aXRsZSA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBQaXRvY2luLUh1cnJpZWQgQmlydGhzLCBFZHVjYXRpb24gTGV2ZWwsIGFuZCBNaWR3aWZlIikgKwogIHRoZW1lKGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSkgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gVFJVRSwgY29sb3IgPSAiYmxhY2siLCBmaWxsID0gImJsdWUiKQpgYGAKCmBgYHtyfQpmaWdfN2EKYGBgCgojIyMgRmlndXJlIDdiOiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gUGl0b2Npbi1odXJyaWVkIGJpcnRocywgZWR1Y2F0aW9uLCBhbmQgd2FudGluZyBhIG1pZHdpZmUuCgpgYGB7ciwgaW5jbHVkZSA9RkFMU0V9CmZpZ183YiA8LSBnZ3Bsb3QoZGF0YSA9IG5hLm9taXQobGlzdGVuaW5nX2RhdGFbLCBjKCJRMTg2MCIsICJtaWRfcGl0IiwgIndpc2hfbWlkIildKSwgYWVzKHggPSBqaXR0ZXIoUTE4NjApLCB5ID0gaml0dGVyKG1pZF9waXQpKSkgKyAKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IGFzLmZhY3Rvcih3aXNoX21pZCkpLCBzaXplID0gNSwgYWxwaGEgPSAwLjIpICsKICB0aGVtZV9jbGFzc2ljKCkgKwogIGxhYnMoeCA9ICJFZHVjYXRpb24gTGV2ZWwiLCB5ID0gIlBpdG9jaW4tSHVycmllZCBCaXJ0aHMiLCB0aXRsZSA9ICJSZWxhdGlvbnNoaXAgYmV0d2VlbiBQaXRvY2luLUh1cnJpZWQgQmlydGhzLCBFZHVjYXRpb24gTGV2ZWwsIGFuZCB3YW50aW5nIGEgTWlkd2lmZSIpICsKICB0aGVtZShheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCkpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IFRSVUUsIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICJibHVlIikKYGBgCgpgYGB7cn0KZmlnXzdiCmBgYAoKRmlndXJlcyA3YSBhbmQgN2Igd2lsbCBiZSBpbnRlcnByZXRlZCBzaW11bHRhbmVvdXNseSBiZWNhdXNlIHRoZXkgYXJlIG5lYXJseSB0aGUgc2FtZSBncmFwaCB3aXRoIGFuIGV4Y2VwdGlvbiBvZiBmYWN0b3JpbmcgYWxvbmcgaGF2aW5nIGFuZCB3YW50aW5nIGEgbWlkd2lmZS4gVGhlIHJlZ3Jlc3Npb24gYW5hbHlzaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFBpdG9jaW4taHVycmllZCBiaXJ0aHMgYW5kIHRoZSBlZHVjYXRpb24gbGV2ZWwgb2YgdGhlIG1vdGhlciB3YXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudC4gVmlzdWFsIGFuYWx5c2lzIG9mIHRoZSBncmFwaCBzaG93cyB0aGF0IGFzIGVkdWNhdGlvbiBsZXZlbCBpbmNyZWFzZXMgKGEgc2NhbGUgZnJvbSBoYXZpbmcgc29tZSBoaWdoIHNjaG9vbCBlZHVjYXRpb24gdG8gYmVpbmcgY29sbGVnZSBlZHVjYXRlZCksIGl0IHdhcyBtb3JlIGxpa2VseSBmb3IgUGl0b2NpbiB0byBiZSBhZG1pbmlzdGVyZWQgZHVyaW5nIGJpcnRoLiBUaGUgZ3JhcGggYWxzbyBzaG93cyBkZXBpY3Rpb25zIG9mIGFuIGVkdWNhdGlvbiBjb2VmZmljaWVudCBiZWluZyAwLjA4MCwgd2hpY2ggd2FzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgYXQgdGhlIDAuMDEgbGV2ZWwgd2hlbiByZWdyZXNzZWQgd2l0aCBQaXRvY2luLWh1cnJpZWQgYmlydGhzLiBUaGUgZmFjdG9yaW5nIG9mIGhhdmluZyBhbmQgd2FudGluZyBhIG1pZHdpZmUsIHdoaWxlIHBlcmhhcHMgbm90IGFzIGluZm9ybWF0aXZlIGFzIG90aGVyIHZhcmlhYmxlcywgcG9pbnRzIHRvIHRoZSBsaWtlbGlob29kIG9mIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gd2FudGluZyBtaWR3aWZlcnkgYW5kIGVkdWNhdGlvbiBsZXZlbC4KCiMjIyBGaWd1cmUgODogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHdhbnRpbmcgYSBtaWR3aWZlIGFuZCBlZHVjYXRpb24gbGV2ZWwuCgpgYGB7cn0KbW9kZWwyIDwtIGxtKHdpc2hfbWlkIH4gbWlkX3BpdCArIFExODYwICsgUTE4NjUsIGRhdGEgPSBsaXN0ZW5pbmdfZGF0YSkKaHV4cmVnKG1vZGVsMiwgc3RhdGlzdGljcyA9IGMoTiA9ICJub2JzIiwgUjIgPSAici5zcXVhcmVkIikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPUZBTFNFfQpmaWdfOCA8LSBnZ3Bsb3QoZGF0YSA9IG5hLm9taXQobGlzdGVuaW5nX2RhdGFbLCBjKCJRMTg2MCIsICJ3aXNoX21pZCIpXSksIGFlcyh4ID0gKFExODYwKSwgeSA9IGppdHRlcih3aXNoX21pZCkpKSArIAogIGdlb21fcG9pbnQoc2l6ZSA9IDUsIGFscGhhID0gMC4yKSArCiAgdGhlbWVfY2xhc3NpYygpICsKICBsYWJzKHggPSAiRWR1Y2F0aW9uIExldmVsIiwgeSA9ICJXYW50aW5nIGEgTWlkd2lmZSIsIHRpdGxlID0gIlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFdhbnRpbmcgYSBNaWR3aWZlIGFuZCBFZHVjYXRpb24gTGV2ZWwiKSArCiAgdGhlbWUoYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBUUlVFLCBjb2xvciA9ICJibGFjayIsIGZpbGwgPSAiYmx1ZSIpCmBgYAoKYGBge3J9CmZpZ184CmBgYAoKSW4gb3JkZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIHRydWx5IGlzIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gYSBtb3RoZXIncyBlZHVjYXRpb24gbGV2ZWwgYW5kIHdhbnRpbmcgYSBtaWR3aWZlLCB3ZSBjaG9zZSB0byBydW4gYW5vdGhlciBsaW5lYXIgbW9kZWwuIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSwgd2FudGluZyBhIG1pZHdpZmUgd2FzIHJlZ3Jlc3NlZCBvbiBhZG1pbmlzdGVyZWQgUGl0b2NpbiwgZWR1Y2F0aW9uIGxldmVsLCBhcyB3ZWxsIGFzIGluY29tZS4gV2hpbGUgdGhlcmUgd2FzIG5vdCBhIHJlbGF0aW9uc2hpcCBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBmcm9tIG5vIHRyZWF0bWVudCwgdGhlIGNvZWZmaWNpZW50IGZvciBpbmNvbWUgd2FzIDAuMDcxLCB3aGljaCB3YXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBhdCB0aGUgcCBcPCAwLjAxIGxldmVsLiBUaGlzIGluZGljYXRlcyBhcyBhIG1vdGhlcidzIGVkdWNhdGlvbiBpcyBpbmNyZWFzZWQsIG1vdGhlcnMgdGVuZCB0byBwcmVmZXIgbWlkd2lmZXJ5IGNhcmUuIFRoZSBuZXcgUjIgdmFyaWFibGUgaXMgLjEwOCwgd2hpY2ggbWVhbnMgdGhhdCAxMC44JSBvZiB0aGUgdmFyaWFiaWxpdHkgb2Ygd2FudGluZyBhIG1pZHdpZmUgY2FuIGJlIGV4cGxhaW5lZCBieSB0aGUgYW1vdW50IG9mIGVkdWNhdGlvbiBhIG1vdGhlciBoYXMgZXhwZXJpZW5jZWQuCgojIyMgRmlndXJlIDlhOiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gUGl0b2Npbi1odXJyaWVkIGJpcnRocywgaW5jb21lLCBhbmQgaGF2aW5nIGEgbWlkd2lmZS4KCmBgYHtyLCBpbmNsdWRlID1GQUxTRX0KZmlnXzlhIDwtIGdncGxvdChkYXRhID0gbmEub21pdChsaXN0ZW5pbmdfZGF0YVssIGMoIlExODY1IiwgIm1pZF9waXQiLCAiaGFkX21pZCIpXSksIGFlcyh4ID0gKFExODY1KSwgeSA9IGppdHRlcihtaWRfcGl0KSkpICsgCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBhcy5mYWN0b3IoaGFkX21pZCkpLHNpemUgPSA1LCBhbHBoYSA9IDAuMikgKwogIHRoZW1lX2NsYXNzaWMoKSArCiAgbGFicyh4ID0gIkluY29tZSBMZXZlbCIsIHkgPSAiUGl0b2Npbi1IdXJyaWVkIEJpcnRocyIsIHRpdGxlID0gIlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFBpdG9jaW4taHVycmllZCBCaXJ0aHMsIEluY29tZSBMZXZlbCwgYW5kIEhhdmluZyBhIE1pZHdpZmUiKSArCiAgdGhlbWUoYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBUUlVFLCBjb2xvciA9ICJibGFjayIsIGZpbGwgPSAiYmx1ZSIpCmBgYAoKYGBge3J9CmZpZ185YQpgYGAKCiMjIyBGaWd1cmUgOWI6IFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBQaXRvY2luLWh1cnJpZWQgYmlydGhzLCBpbmNvbWUsIGFuZCB3YW50aW5nIGEgbWlkd2lmZS4KCmBgYHtyLCBpbmNsdWRlID1GQUxTRX0KZmlnXzliIDwtIGdncGxvdChkYXRhID0gbmEub21pdChsaXN0ZW5pbmdfZGF0YVssIGMoIlExODY1IiwgIm1pZF9waXQiLCAid2lzaF9taWQiLCAiUTE4NjAiKV0pLCBhZXMoeCA9IChRMTg2NSksIHkgPSBqaXR0ZXIobWlkX3BpdCkpKSArIAogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gYXMuZmFjdG9yKHdpc2hfbWlkKSksc2l6ZSA9IDUsIGFscGhhID0gMC4yKSArCiAgdGhlbWVfY2xhc3NpYygpICsKICBsYWJzKHggPSAiSW5jb21lIExldmVsIiwgeSA9ICJQaXRvY2luLUh1cnJpZWQgQmlydGhzIiwgdGl0bGUgPSAiUmVsYXRpb25zaGlwIGJldHdlZW4gUGl0b2NpbiBIdXJyaWVkIEJpcnRocywgSW5jb21lIExldmVsLCBhbmQgV2FudGluZyBhIE1pZHdpZmUiKSArCiAgdGhlbWUoYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUpKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBUUlVFLCBjb2xvciA9ICJibGFjayIsIGZpbGwgPSAiYmx1ZSIpCmBgYAoKYGBge3J9CmZpZ185YgpgYGAKClNpbWlsYXIgdG8gN2EgYW5kIDdiLCB3ZSB3aWxsIGxvb2sgYXQgOGEgYW5kIDhiIGluIGEgc2luZ2xlIGludGVycHJldGF0aW9uIGdpdmVuIHRoZSBzaW1pbGFyaXRpZXMuIEdyYXBoIDhhIGFuZCA4YiBhcmUgaWRlbnRpY2FsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgZmFjdG9yaW5nIG9mIGhhdmluZyBhIG1pZHdpZmUgYW5kIHdhbnRpbmcgYSBtaWR3aWZlLiBXaGlsZSB0aGUgcmVncmVzc2lvbiBsaW5lIG1heSBhcHBlYXIgdG8gYmUgcG9zaXRpdmVseSBzbG9waW5nLCBhbmQgdGhlcmVmb3JlLCBpbmRpY2F0aXZlIG9mIGEgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gUGl0b2Npbi1odXJyaWVkIGJpcnRocyBhbmQgaW5jb21lLCB0aGUgbnVtYmVycyBvZiB0aGUgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgZG8gbm90IHN1cHBvcnQgc3VjaCBhbiBpbmZlcmVuY2UuIEluIGZhY3QsIHRoZSBjb2VmZmljaWVudCBvZiBQaXRvY2luLWh1cnJpZWQgYmlydGhzIHJlZ3Jlc3NlZCBvbiBpbmNvbWUsIGVkdWNhdGlvbiwgYW5kIGhhdmluZyBhIG1pZHdpZmUgaXMgaW4gZmFjdCBuZWdhdGl2ZSwgd2l0aCBhIHZhbHVlIG9mIC0wLjAwNS4gVGhlcmVmb3JlLCB0aGVyZSBpcyBub3QgYSBzaWduaWZpY2FudCByZWxhdGlvbnNoaXAgYmV0d2VlbiBodXJyaWVkIGJpcnRocyBhbmQgaW5jb21lLgoKIyBMaW1pdGF0aW9ucyBhbmQgT3RoZXIgRmFjdG9ycwoKVGhlcmUgcmVtYWlucyB0aGUgYXNwZWN0IG9mIGV4cGVyaW1lbnRhbCBleHRlcm5hbGl0aWVzOyBzb21lIHZhcmlhYmxlcyBhbmQgdGhlaXIgcmVzdWx0aW5nIGVmZmVjdHMgYXJlIG5vdCBjb21wbGV0ZWx5IGFjY291bnRlZCBmb3Igd2l0aGluIHRoZSBleHBlcmltZW50LiBKdXN0IGZyb20gdGhlIGRhdGEgY29sbGVjdGlvbiBtZXRob2QgYWxvbmUsIG5vdGVkIGxpbWl0YXRpb25zIHdlcmUgb2JzZXJ2ZWQuIFRoZSBkYXRhIHdhcyBvbmx5IGNvbGxlY3RlZCBpbiB0aGUgc3RhdGUgb2YgQ2FsaWZvcm5pYSwgb25seSBieSB0aG9zZSB0aGF0IGNvdWxkIHNwZWFrIFNwYW5pc2ggYW5kL29yIEVuZ2xpc2gsIGhhZCBhIGNoaWxkIGR1cmluZyAyMDE2LCBoYWQgYSB3YXkgb2YgcmVzcG9uZGluZyB0byBhIHN1cnZleSBvdmVyIHBob25lIGNhbGwsIGFuZCByZXNwb25kZWQgYmFjayB0byB0aGUgTGlzdGVuaW5nIFRvIE1vdGhlcnMgU3VydmV5LiBBbGwgb2Ygd2hpY2ggbW9yZSBuYXJyb3dseSByZWZpbmluZyB0aGUgc2NvcGUgaW5zdGVhZCBvZiBwcm92aWRpbmcgb3ZlcmFsbCBtb2RlbHMgYW5kIGRhdGEgYXBwbGljYWJsZSB0byBhbGwgbW90aGVycy4gVGhvdWdoIGl0IGNhbiBiZSBpbml0aWFsbHkgZGVlbWVkIHRoYXQgQ2FsaWZvcm5pYSBpcyBhIGdvb2Qgc3RhdGUgdG8gcnVuIGFuIGV4cGVyaW1lbnQgb2YgdGhpcyB0eXBlIG9uIGR1ZSB0byBmYWN0b3JzIHN1Y2ggYXMgcmFjZSwgaW5jb21lLCBlZHVjYXRpb24sIHNoZWVyIHBvcHVsYXRpb24sIGFuZCBvdGhlciBtZWFzdXJlcywgaXQgc3RpbGwgZG9lcyBub3QgZW5jb21wYXNzIGV2ZXJ5IHR5cGUgb2YgbW90aGVyIG9yIGJpcnRoLXByYWN0aWNlLiBGdXJ0aGVybW9yZSwgYWxsIHBhcnRpY2lwYW50cyBoYWQgdG8gYmUgb3ZlciB0aGUgYWdlIG9mIDE4LCBhbmQgYmVjYXVzZSBtb3RoZXJzIGNhbiBoYXZlIGNoaWxkcmVuIGJlbG93IHRoYXQgYWdlLCB0aGF0IGFsc28gb21pdHMgYSBncm91cCBvZiBpbmRpdmlkdWFscyB0aGF0IGNhbiBpbmZsdWVuY2Ugb3VyIGZpbmFsIGRhdGEuIEluIGZhY3QsIG5lYXJseSAxMyUgb2YgYWxsIG1vdGhlcnMgaW4gQW1lcmljYSBhcmUgYmVsb3cgdGhlIGFnZSBvZiAxOCAoUGV3IFJlc2VhcmNoIENlbnRlciAyMDE4KS4KClRoZSBhZ2UgZ2FwIG9taXNzaW9uIGFuZCB0aGUgYmFycmllcnMgdG8gcHJvdmlkaW5nIHN1cnZleSBkYXRhIHN1Y2ggYXMgdGhlIGFiaWxpdHkgYW5kIHRpbWUgdG8gZ2l2ZSBhIHBob25lIGNhbGwgY2FuIGRyYXN0aWNhbGx5IGFsdGVyIHRoZSBpbmNvbWUgdmFyaWFibGVzIHJhbiBpbiBvdXIgYW5hbHlzZXMgYXMgd2VsbC4gQXMgYm90aCBwZW9wbGUgd2hvIGFyZSB1bmRlciB0aGUgYWdlIG9mIDE4IG9yIHRob3NlIHdobyBkbyBub3QgcG9zc2VzcyB0aGUgYWJpbGl0eSBvciBtb25leSB0byBoYXZlIGEgY2VsbCBwaG9uZSBjb3VsZCByZWFzb25hYmx5IGJlIGFzc3VtZWQgdG8gaGF2ZSBsb3dlciBpbmNvbWUgdGhhbiB0aG9zZSB3aG8gYXJlIGFib3ZlIDE4IGFuZCBoYXZlIGNhcGFiaWxpdGllcyBvZiBnaXZpbmcgc3VydmV5IGRhdGEgdmlhIHBob25lIGNhbGwuIFRoZSBTcGFuaXNoL0VuZ2xpc2ggYmFycmllciBlbGltaW5hdGVzIG1vdGhlcnMgd2hvIGRvbid0IGJlbG9uZyB0byBzdWNoIGEgY2F0ZWdvcnkgZnJvbSBnaXZpbmcgdGhlaXIgZGF0YSBhdCBhbGwsIGluZmx1ZW5jaW5nIG91ciBlc3RpbWF0aW9ucyBpbiBtdWx0aXBsZSByZWdhcmRzOyBhcyBub24gU3BhbmlzaC9FbmdsaXNoIHNwZWFraW5nIHBlb3BsZSBoYXZlIHdpZGUgdmFyaWVkIGluY29tZXMgYW5kIGVkdWNhdGlvbmFsIGxldmVscy4gTGFzdGx5LCBhcyBzZWVuIGluIHRoZSBMaXN0ZW5pbmcgVG8gTW90aGVycyBTdXJ2ZXkgRGF0YSBpdHNlbGYsIGZvciBtYW55IG9mIHRoZSBhZG1pbmlzdHJhdGlvbiBvciBiaXJ0aC1wcmFjdGljZSBxdWVzdGlvbnMsIHRoZSBhbnN3ZXIgb2YgIkkgZG9uJ3Qga25vdyIgd2FzIGEgY2hvaWNlLiBUaG91Z2ggbm90IG5lY2Vzc2FyaWx5IG1lZGljYWwgbWFscHJhY3RpY2UsIHdlIGRvIGtub3cgdGhhdCAgY29uc2VudCBkdXJpbmcgYmlydGggaXMgb2Z0ZW4gZm9yZ290dGVuIG9yIGRpc3JlZ2FyZGVkLCBlc3BlY2lhbGx5IHdoZW4gcGVyZm9ybWVkIG91dHNpZGUgdGhlIG1pZHdpZmUgbW9kZWwgb2YgY2FyZS4gCgpGcm9tIGVpdGhlciBsYW5ndWFnZSBiYXJyaWVycywgbWVudGFsIGF3YXJlbmVzcyBvZiB0aGUgbW90aGVyLCBvciBvdGhlciBjb25kaXRpb25zIHdlIGNhbiBjb25jbHVkZSB0aGF0IG1vdGhlcnMgbWlnaHQgbm90IGJlIGFibGUgdG8gcmVtZW1iZXIgY2hvaWNlcyBvciB3ZXJlIG5vdCBhZGVxdWF0ZWx5IGluZm9ybWVkIGFib3V0IHRoZSBhY3Rpb25zIG9mIHRoZWlyIHByb3ZpZGVyLiBCZWNhdXNlIG9mIHRoaXMsIHRoZSBtYWduaXR1ZGUgb2YgYW55IGVmZmVjdCBhbmFseXplZCBpbiBiaXJ0aCBpcyBkaWZmaWN1bHQgdG8gZGV0ZXJtaW5lLgoKIyBDb25jbHVzaW9uCgpUaGUgaW5pdGlhbCBoeXBvdGhlc2lzIHdhcyBpbmNvcnJlY3QgYnV0IHRoaXMgZXhwZXJpbWVudCByZXN1bHRlZCBpbiBsaW1pdGVkIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBlZHVjYXRpb25hbCBsZXZlbCBvZiB0aGUgbW90aGVyIGFuZCBQaXRvY2luIHVzYWdlLCBhcyB3ZWxsIGFzIGVpdGhlciBtaWR3aWZlcnkgcHJlc2VuY2Ugb3IgdGhlIGRlc2lyZSBmb3IgbWlkd2lmZXJ5IGNhcmUuIFRob3VnaCB0aGUgc3R5bGVzIGFuZCBwcmFjdGljZXMgaW52b2x2ZWQgaW4gY2hpbGRiaXJ0aCBtYXkgaGF2ZSBjaGFuZ2VkIG92ZXIgdGltZSwgdGhlcmUgaXMgc3RpbGwgYSBkZWVwIGNvbm5lY3Rpb24gdG8gYmUgZXhwbG9yZWQgYmV0d2VlbiB0aGUgbW90aGVyLCB0aGVpciBiYWNrZ3JvdW5kLCBhbmQgdGhlIG1vZGVscyBvZiBjYXJlIHdoaWNoIGJyaW5nIGNoaWxkcmVuIGludG8gdGhlIHdvcmxkLiAKCiMgUmVmZXJlbmNlcwoKRXZpZGVuY2Ugb246IFBpdG9jaW7CriBEdXJpbmcgdGhlIFRoaXJkIFN0YWdlIG9mIExhYm9yLiAoMjAyMCwgSnVuZSAyMykuIEV2aWRlbmNlIEJhc2VkIEJpcnRowq4uIDxodHRwczovL2V2aWRlbmNlYmFzZWRiaXJ0aC5jb20vZXZpZGVuY2Utb24tcGl0b2Npbi1kdXJpbmctdGhlLXRoaXJkLXN0YWdlLW9mLWxhYm9yLz4KCkhlcm1hbm4sIEEuIChuLmQuKS4gTWFuYWdpbmcgTGFib3Igd2l0aCBQaXRvY2luOiBNZWRpY2FsIERpc2NvdXJzZSBhbmQgRGVjaXNpb24tTWFraW5nIGluIENvbnRlbXBvcmFyeSBDbGluaWNhbCBTZXR0aW5ncy4gOTkuCgpJbiBEZWZlbnNlIG9mIE5vcm1hbCBCaXJ0aC4gKDIwMTksIFNlcHRlbWJlciAyNikuIFRoZSBNaWR3aXZlcyBPZiBOZXcgSmVyc2V5LiA8aHR0cHM6Ly9taWR3aXZlc29mbmouY29tL2luLWRlZmVuc2Utb2Ytbm9ybWFsLWJpcnRoLz4KCk1hbnN5LCBBLiAoMjAxNykuIERvZXMgTGFib3IgQXVnbWVudGF0aW9uIHdpdGggT3h5dG9jaW4gSW5jcmVhc2UgdGhlIFJpc2sgb2YgUG9zdHBhcnR1bSBIZW1vcnJoYWdlPyBBIFJhbmRvbWl6ZWQgQ29udHJvbGxlZCBUcmlhbC4gQ2xpbmljcyBpbiBNb3RoZXIgYW5kIENoaWxkIEhlYWx0aCwgMTQoMykuIDxodHRwczovL2RvaS5vcmcvMTAuNDE3Mi8yMDkwLTcyMTQuMTAwMDI2OD4KClBldyBSZXNlYXJjaCBDZW50ZXIuICgyMDE4LCBKYW51YXJ5IDEwKS4gV29tZW4gYXJlIGRlbGF5aW5nIG1vdGhlcmhvb2QgdGhyb3VnaCB0aGVpciAyMHMuIFBldyBSZXNlYXJjaCBDZW50ZXIncyBTb2NpYWwgJiBEZW1vZ3JhcGhpYyBUcmVuZHMgUHJvamVjdC4gUmV0cmlldmVkIE5vdmVtYmVyIDMwLCAyMDIxLCBmcm9tIDxodHRwczovL3d3dy5wZXdyZXNlYXJjaC5vcmcvc29jaWFsLXRyZW5kcy8yMDE4LzAxLzE4L3RoZXlyZS13YWl0aW5nLWxvbmdlci1idXQtdS1zLXdvbWVuLXRvZGF5LW1vcmUtbGlrZWx5LXRvLWhhdmUtY2hpbGRyZW4tdGhhbi1hLWRlY2FkZS1hZ28vcHN0bF8xLTE4LTE4LW1vdGhlcmhvb2QtMDEvPgoKVGhlc2lzIEV4cGVjdGF0aW9ucyBhbmQgRXhwZXJpZW5jZXMgb2YgRmlyc3QtVGltZSBNb3RoZXJzLCBBbmRyZWEgRnJldW5kLnBkZi4gKG4uZC4pLiBSZXRyaWV2ZWQgTm92ZW1iZXIgMzAsIDIwMjEsIGZyb20gPGh0dHBzOi8vc2Nob2xhcndvcmtzLml1cHVpLmVkdS9iaXRzdHJlYW0vaGFuZGxlLzE4MDUvMTY2OS9UaGVzaXMlMjBFeHBlY3RhdGlvbnMlMjBhbmQlMjBFeHBlcmllbmNlcyUyMG9mJTIwRmlyc3QtVGltZSUyME1vdGhlcnMsJTIwQW5kcmVhJTIwRnJldW5kLnBkZj9zZXF1ZW5jZT0yPgo=